home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / tcl / tcl67.lha / tcl6.7 / tcl.h < prev    next >
C/C++ Source or Header  |  1993-02-10  |  12KB  |  366 lines

  1. /*
  2.  * tcl.h --
  3.  *
  4.  *    This header file describes the externally-visible facilities
  5.  *    of the Tcl interpreter.
  6.  *
  7.  * Copyright 1987-1991 Regents of the University of California
  8.  * Permission to use, copy, modify, and distribute this
  9.  * software and its documentation for any purpose and without
  10.  * fee is hereby granted, provided that the above copyright
  11.  * notice appear in all copies.  The University of California
  12.  * makes no representations about the suitability of this
  13.  * software for any purpose.  It is provided "as is" without
  14.  * express or implied warranty.
  15.  *
  16.  * $Header: /user6/ouster/tcl/RCS/tcl.h,v 1.92 93/02/04 15:48:05 ouster Exp $ SPRITE (Berkeley)
  17.  */
  18.  
  19. #ifndef _TCL
  20. #define _TCL
  21.  
  22. #define TCL_VERSION "6.7"
  23. #define TCL_MAJOR_VERSION 6
  24. #define TCL_MINOR_VERSION 7
  25.  
  26. /*
  27.  * Definitions that allow this header file to be used either with or
  28.  * without ANSI C features like function prototypes.
  29.  */
  30.  
  31. #undef _ANSI_ARGS_
  32. #undef const
  33. #if ((defined(__STDC__) || defined(SABER)) && !defined(NO_PROTOTYPE)) || defined(__cplusplus)
  34. #   define _ANSI_ARGS_(x)    x
  35. #   define CONST const
  36. #   ifdef __cplusplus
  37. #       define VARARGS (...)
  38. #   else
  39. #       define VARARGS ()
  40. #   endif
  41. #else
  42. #   define _ANSI_ARGS_(x)    ()
  43. #   define CONST
  44. #endif
  45.  
  46. #ifdef __cplusplus
  47. #   define EXTERN extern "C"
  48. #else
  49. #   define EXTERN extern
  50. #endif
  51.  
  52. /*
  53.  * Macro to use instead of "void" for arguments that must have
  54.  * type "void *" in ANSI C;  maps them to type "char *" in
  55.  * non-ANSI systems.
  56.  */
  57.  
  58. #ifndef VOID
  59. #   ifdef __STDC__
  60. #       define VOID void
  61. #   else
  62. #       define VOID char
  63. #   endif
  64. #endif
  65.  
  66. /*
  67.  * Miscellaneous declarations (to allow Tcl to be used stand-alone,
  68.  * without the rest of Sprite).
  69.  */
  70.  
  71. #ifndef NULL
  72. #define NULL 0
  73. #endif
  74.  
  75. #ifndef _CLIENTDATA
  76. typedef int *ClientData;
  77. #define _CLIENTDATA
  78. #endif
  79.  
  80. /*
  81.  * Data structures defined opaquely in this module.  The definitions
  82.  * below just provide dummy types.  A few fields are made visible in
  83.  * Tcl_Interp structures, namely those for returning string values.
  84.  * Note:  any change to the Tcl_Interp definition below must be mirrored
  85.  * in the "real" definition in tclInt.h.
  86.  */
  87.  
  88. typedef struct Tcl_Interp{
  89.     char *result;        /* Points to result string returned by last
  90.                  * command. */
  91.     void (*freeProc) _ANSI_ARGS_((char *blockPtr));
  92.                 /* Zero means result is statically allocated.
  93.                  * If non-zero, gives address of procedure
  94.                  * to invoke to free the result.  Must be
  95.                  * freed by Tcl_Eval before executing next
  96.                  * command. */
  97.     int errorLine;        /* When TCL_ERROR is returned, this gives
  98.                  * the line number within the command where
  99.                  * the error occurred (1 means first line). */
  100. } Tcl_Interp;
  101.  
  102. typedef int *Tcl_Trace;
  103. typedef int *Tcl_CmdBuf;
  104.  
  105. /*
  106.  * When a TCL command returns, the string pointer interp->result points to
  107.  * a string containing return information from the command.  In addition,
  108.  * the command procedure returns an integer value, which is one of the
  109.  * following:
  110.  *
  111.  * TCL_OK        Command completed normally;  interp->result contains
  112.  *            the command's result.
  113.  * TCL_ERROR        The command couldn't be completed successfully;
  114.  *            interp->result describes what went wrong.
  115.  * TCL_RETURN        The command requests that the current procedure
  116.  *            return;  interp->result contains the procedure's
  117.  *            return value.
  118.  * TCL_BREAK        The command requests that the innermost loop
  119.  *            be exited;  interp->result is meaningless.
  120.  * TCL_CONTINUE        Go on to the next iteration of the current loop;
  121.  *            interp->result is meaninless.
  122.  */
  123.  
  124. #define TCL_OK        0
  125. #define TCL_ERROR    1
  126. #define TCL_RETURN    2
  127. #define TCL_BREAK    3
  128. #define TCL_CONTINUE    4
  129.  
  130. #define TCL_RESULT_SIZE 199
  131.  
  132. /*
  133.  * Procedure types defined by Tcl:
  134.  */
  135.  
  136. typedef void (Tcl_CmdDeleteProc) _ANSI_ARGS_((ClientData clientData));
  137. typedef int (Tcl_CmdProc) _ANSI_ARGS_((ClientData clientData,
  138.     Tcl_Interp *interp, int argc, char *argv[]));
  139. typedef void (Tcl_CmdTraceProc) _ANSI_ARGS_((ClientData clientData,
  140.     Tcl_Interp *interp, int level, char *command, Tcl_CmdProc *proc,
  141.     ClientData cmdClientData, int argc, char *argv[]));
  142. typedef void (Tcl_FreeProc) _ANSI_ARGS_((char *blockPtr));
  143. typedef char *(Tcl_VarTraceProc) _ANSI_ARGS_((ClientData clientData,
  144.     Tcl_Interp *interp, char *part1, char *part2, int flags));
  145.  
  146. /*
  147.  * Flag values passed to Tcl_Eval (see the man page for details;  also
  148.  * see tclInt.h for additional flags that are only used internally by
  149.  * Tcl):
  150.  */
  151.  
  152. #define TCL_BRACKET_TERM    1
  153.  
  154. /*
  155.  * Flag that may be passed to Tcl_ConvertElement to force it not to
  156.  * output braces (careful!  if you change this flag be sure to change
  157.  * the definitions at the front of tclUtil.c).
  158.  */
  159.  
  160. #define TCL_DONT_USE_BRACES    1
  161.  
  162. /*
  163.  * Flag value passed to Tcl_RecordAndEval to request no evaluation
  164.  * (record only).
  165.  */
  166.  
  167. #define TCL_NO_EVAL        -1
  168.  
  169. /*
  170.  * Specil freeProc values that may be passed to Tcl_SetResult (see
  171.  * the man page for details):
  172.  */
  173.  
  174. #define TCL_VOLATILE    ((Tcl_FreeProc *) -1)
  175. #define TCL_STATIC    ((Tcl_FreeProc *) 0)
  176. #define TCL_DYNAMIC    ((Tcl_FreeProc *) free)
  177.  
  178. /*
  179.  * Flag values passed to variable-related procedures.
  180.  */
  181.  
  182. #define TCL_GLOBAL_ONLY        1
  183. #define TCL_APPEND_VALUE    2
  184. #define TCL_LIST_ELEMENT    4
  185. #define TCL_NO_SPACE        8
  186. #define TCL_TRACE_READS        0x10
  187. #define TCL_TRACE_WRITES    0x20
  188. #define TCL_TRACE_UNSETS    0x40
  189. #define TCL_TRACE_DESTROYED    0x80
  190. #define TCL_INTERP_DESTROYED    0x100
  191. #define TCL_LEAVE_ERR_MSG    0x200
  192.  
  193. /*
  194.  * Additional flag passed back to variable watchers.  This flag must
  195.  * not overlap any of the TCL_TRACE_* flags defined above or the
  196.  * TRACE_* flags defined in tclInt.h.
  197.  */
  198.  
  199. #define TCL_VARIABLE_UNDEFINED    8
  200.  
  201. /*
  202.  * The following declarations either map ckalloc and ckfree to
  203.  * malloc and free, or they map them to procedures with all sorts
  204.  * of debugging hooks defined in tclCkalloc.c.
  205.  */
  206.  
  207. #ifdef TCL_MEM_DEBUG
  208.  
  209. EXTERN char *        Tcl_DbCkalloc _ANSI_ARGS_((unsigned int size,
  210.                 char *file, int line));
  211. EXTERN int        Tcl_DbCkfree _ANSI_ARGS_((char *ptr,
  212.                 char *file, int line));
  213. EXTERN char *        Tcl_DbCkrealloc _ANSI_ARGS_((char *ptr,
  214.                 unsigned int size, char *file, int line));
  215. EXTERN int        Tcl_DumpActiveMemory _ANSI_ARGS_((char *fileName));
  216. EXTERN void        Tcl_ValidateAllMemory _ANSI_ARGS_((char *file,
  217.                 int line));
  218. #  define ckalloc(x) Tcl_DbCkalloc(x, __FILE__, __LINE__)
  219. #  define ckfree(x)  Tcl_DbCkfree(x, __FILE__, __LINE__)
  220. #  define ckrealloc(x,y) Tcl_DbCkrealloc((x), (y),__FILE__, __LINE__)
  221.  
  222. #else
  223.  
  224. #  define ckalloc(x) malloc(x)
  225. #  define ckfree(x)  free(x)
  226. #  define ckrealloc(x,y) realloc(x,y)
  227. #  define Tcl_DumpActiveMemory(x)
  228. #  define Tcl_ValidateAllMemory(x,y)
  229.  
  230. #endif /* TCL_MEM_DEBUG */
  231.  
  232. /*
  233.  * Macro to free up result of interpreter.
  234.  */
  235.  
  236. #define Tcl_FreeResult(interp)                    \
  237.     if ((interp)->freeProc != 0) {                \
  238.     if ((interp)->freeProc == (Tcl_FreeProc *) free) {    \
  239.         ckfree((interp)->result);                \
  240.     } else {                        \
  241.         (*(interp)->freeProc)((interp)->result);        \
  242.     }                            \
  243.     (interp)->freeProc = 0;                    \
  244.     }
  245.  
  246. /*
  247.  * Exported Tcl procedures:
  248.  */
  249.  
  250. EXTERN void        Tcl_AppendElement _ANSI_ARGS_((Tcl_Interp *interp,
  251.                 char *string, int noSep));
  252. EXTERN void        Tcl_AppendResult _ANSI_ARGS_(VARARGS);
  253. EXTERN char *        Tcl_AssembleCmd _ANSI_ARGS_((Tcl_CmdBuf buffer,
  254.                 char *string));
  255. EXTERN void        Tcl_AddErrorInfo _ANSI_ARGS_((Tcl_Interp *interp,
  256.                 char *message));
  257. EXTERN char        Tcl_Backslash _ANSI_ARGS_((char *src,
  258.                 int *readPtr));
  259. EXTERN int        Tcl_CommandComplete _ANSI_ARGS_((char *cmd));
  260. EXTERN char *        Tcl_Concat _ANSI_ARGS_((int argc, char **argv));
  261. EXTERN int        Tcl_ConvertElement _ANSI_ARGS_((char *src,
  262.                 char *dst, int flags));
  263. EXTERN Tcl_CmdBuf    Tcl_CreateCmdBuf _ANSI_ARGS_((void));
  264. EXTERN void        Tcl_CreateCommand _ANSI_ARGS_((Tcl_Interp *interp,
  265.                 char *cmdName, Tcl_CmdProc *proc,
  266.                 ClientData clientData,
  267.                 Tcl_CmdDeleteProc *deleteProc));
  268. EXTERN Tcl_Interp *    Tcl_CreateInterp _ANSI_ARGS_((void));
  269. EXTERN int        Tcl_CreatePipeline _ANSI_ARGS_((Tcl_Interp *interp,
  270.                 int argc, char **argv, int **pidArrayPtr,
  271.                 int *inPipePtr, int *outPipePtr,
  272.                 int *errFilePtr));
  273. EXTERN Tcl_Trace    Tcl_CreateTrace _ANSI_ARGS_((Tcl_Interp *interp,
  274.                 int level, Tcl_CmdTraceProc *proc,
  275.                 ClientData clientData));
  276. EXTERN void        Tcl_DeleteCmdBuf _ANSI_ARGS_((Tcl_CmdBuf buffer));
  277. EXTERN int        Tcl_DeleteCommand _ANSI_ARGS_((Tcl_Interp *interp,
  278.                 char *cmdName));
  279. EXTERN void        Tcl_DeleteInterp _ANSI_ARGS_((Tcl_Interp *interp));
  280. EXTERN void        Tcl_DeleteTrace _ANSI_ARGS_((Tcl_Interp *interp,
  281.                 Tcl_Trace trace));
  282. EXTERN void        Tcl_DetachPids _ANSI_ARGS_((int numPids, int *pidPtr));
  283. EXTERN char *        Tcl_ErrnoId _ANSI_ARGS_((void));
  284. EXTERN int        Tcl_Eval _ANSI_ARGS_((Tcl_Interp *interp, char *cmd,
  285.                 int flags, char **termPtr));
  286. EXTERN int        Tcl_EvalFile _ANSI_ARGS_((Tcl_Interp *interp,
  287.                 char *fileName));
  288. EXTERN int        Tcl_ExprBoolean _ANSI_ARGS_((Tcl_Interp *interp,
  289.                 char *string, int *ptr));
  290. EXTERN int        Tcl_ExprDouble _ANSI_ARGS_((Tcl_Interp *interp,
  291.                 char *string, double *ptr));
  292. EXTERN int        Tcl_ExprLong _ANSI_ARGS_((Tcl_Interp *interp,
  293.                 char *string, long *ptr));
  294. EXTERN int        Tcl_ExprString _ANSI_ARGS_((Tcl_Interp *interp,
  295.                 char *string));
  296. EXTERN int        Tcl_Fork _ANSI_ARGS_((void));
  297. EXTERN int        Tcl_GetBoolean _ANSI_ARGS_((Tcl_Interp *interp,
  298.                 char *string, int *boolPtr));
  299. EXTERN int        Tcl_GetDouble _ANSI_ARGS_((Tcl_Interp *interp,
  300.                 char *string, double *doublePtr));
  301. EXTERN int        Tcl_GetInt _ANSI_ARGS_((Tcl_Interp *interp,
  302.                 char *string, int *intPtr));
  303. EXTERN char *        Tcl_GetVar _ANSI_ARGS_((Tcl_Interp *interp,
  304.                 char *varName, int flags));
  305. EXTERN char *        Tcl_GetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  306.                 char *part1, char *part2, int flags));
  307. EXTERN int        Tcl_GlobalEval _ANSI_ARGS_((Tcl_Interp *interp,
  308.                 char *command));
  309. EXTERN void        Tcl_InitHistory _ANSI_ARGS_((Tcl_Interp *interp));
  310. EXTERN void        Tcl_InitMemory _ANSI_ARGS_((Tcl_Interp *interp));
  311. EXTERN char *        Tcl_Merge _ANSI_ARGS_((int argc, char **argv));
  312. EXTERN char *        Tcl_ParseVar _ANSI_ARGS_((Tcl_Interp *interp,
  313.                 char *string, char **termPtr));
  314. EXTERN int        Tcl_RecordAndEval _ANSI_ARGS_((Tcl_Interp *interp,
  315.                 char *cmd, int flags));
  316. EXTERN void        Tcl_ResetResult _ANSI_ARGS_((Tcl_Interp *interp));
  317. #define Tcl_Return Tcl_SetResult
  318. EXTERN int        Tcl_ScanElement _ANSI_ARGS_((char *string,
  319.                 int *flagPtr));
  320. EXTERN void        Tcl_SetErrorCode _ANSI_ARGS_(VARARGS);
  321. EXTERN void        Tcl_SetResult _ANSI_ARGS_((Tcl_Interp *interp,
  322.                 char *string, Tcl_FreeProc *freeProc));
  323. EXTERN char *        Tcl_SetVar _ANSI_ARGS_((Tcl_Interp *interp,
  324.                 char *varName, char *newValue, int flags));
  325. EXTERN char *        Tcl_SetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  326.                 char *part1, char *part2, char *newValue,
  327.                 int flags));
  328. EXTERN char *        Tcl_SignalId _ANSI_ARGS_((int sig));
  329. EXTERN char *        Tcl_SignalMsg _ANSI_ARGS_((int sig));
  330. EXTERN int        Tcl_SplitList _ANSI_ARGS_((Tcl_Interp *interp,
  331.                 char *list, int *argcPtr, char ***argvPtr));
  332. EXTERN int        Tcl_StringMatch _ANSI_ARGS_((char *string,
  333.                 char *pattern));
  334. EXTERN char *        Tcl_TildeSubst _ANSI_ARGS_((Tcl_Interp *interp,
  335.                 char *name));
  336. EXTERN int        Tcl_TraceVar _ANSI_ARGS_((Tcl_Interp *interp,
  337.                 char *varName, int flags, Tcl_VarTraceProc *proc,
  338.                 ClientData clientData));
  339. EXTERN int        Tcl_TraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  340.                 char *part1, char *part2, int flags,
  341.                 Tcl_VarTraceProc *proc, ClientData clientData));
  342. EXTERN char *        Tcl_UnixError _ANSI_ARGS_((Tcl_Interp *interp));
  343. EXTERN int        Tcl_UnsetVar _ANSI_ARGS_((Tcl_Interp *interp,
  344.                 char *varName, int flags));
  345. EXTERN int        Tcl_UnsetVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  346.                 char *part1, char *part2, int flags));
  347. EXTERN void        Tcl_UntraceVar _ANSI_ARGS_((Tcl_Interp *interp,
  348.                 char *varName, int flags, Tcl_VarTraceProc *proc,
  349.                 ClientData clientData));
  350. EXTERN void        Tcl_UntraceVar2 _ANSI_ARGS_((Tcl_Interp *interp,
  351.                 char *part1, char *part2, int flags,
  352.                 Tcl_VarTraceProc *proc, ClientData clientData));
  353. EXTERN int        Tcl_VarEval _ANSI_ARGS_(VARARGS);
  354. EXTERN ClientData    Tcl_VarTraceInfo _ANSI_ARGS_((Tcl_Interp *interp,
  355.                 char *varName, int flags,
  356.                 Tcl_VarTraceProc *procPtr,
  357.                 ClientData prevClientData));
  358. EXTERN ClientData    Tcl_VarTraceInfo2 _ANSI_ARGS_((Tcl_Interp *interp,
  359.                 char *part1, char *part2, int flags,
  360.                 Tcl_VarTraceProc *procPtr,
  361.                 ClientData prevClientData));
  362. EXTERN int        Tcl_WaitPids _ANSI_ARGS_((int numPids, int *pidPtr,
  363.                 int *statusPtr));
  364.  
  365. #endif /* _TCL */
  366.